/*
 * The MIT License
 *
 * Copyright 2015 chronosinfo.com.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 * Autor John Vanderson M Lima
 */

package com.chronos.pafecf.entidades;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author usuario
 */
@Entity
@Table(name = "ECF_MOVIMENTO", catalog = "", schema = "")
@NamedQueries({
    @NamedQuery(name = "EcfMovimento.findAll", query = "SELECT e FROM EcfMovimento e")})
public class EcfMovimento implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "ID", nullable = false)
    private Integer id;
    @Basic(optional = false)
    @Column(name = "ID_GERENTE_SUPERVISOR", nullable = false)
    private int idGerenteSupervisor;
    @Column(name = "DATA_ABERTURA")
    @Temporal(TemporalType.DATE)
    private Date dataAbertura;
    @Column(name = "HORA_ABERTURA", length = 8)
    private String horaAbertura;
    @Column(name = "DATA_FECHAMENTO")
    @Temporal(TemporalType.DATE)
    private Date dataFechamento;
    @Column(name = "HORA_FECHAMENTO", length = 8)
    private String horaFechamento;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "TOTAL_SUPRIMENTO", precision = 18, scale = 6)
    private BigDecimal totalSuprimento;
    @Column(name = "TOTAL_SANGRIA", precision = 18, scale = 6)
    private BigDecimal totalSangria;
    @Column(name = "TOTAL_NAO_FISCAL", precision = 18, scale = 6)
    private BigDecimal totalNaoFiscal;
    @Column(name = "TOTAL_VENDA", precision = 18, scale = 6)
    private BigDecimal totalVenda;
    @Column(name = "TOTAL_DESCONTO", precision = 18, scale = 6)
    private BigDecimal totalDesconto;
    @Column(name = "TOTAL_ACRESCIMO", precision = 18, scale = 6)
    private BigDecimal totalAcrescimo;
    @Column(name = "TOTAL_FINAL", precision = 18, scale = 6)
    private BigDecimal totalFinal;
    @Column(name = "TOTAL_RECEBIDO", precision = 18, scale = 6)
    private BigDecimal totalRecebido;
    @Column(name = "TOTAL_TROCO", precision = 18, scale = 6)
    private BigDecimal totalTroco;
    @Column(name = "TOTAL_CANCELADO", precision = 18, scale = 6)
    private BigDecimal totalCancelado;
    @Basic(optional = false)
    @Column(name = "STATUS_MOVIMENTO", nullable = false)
    private char statusMovimento;
    @Column(name = "SINCRONIZADO")
    private Character sincronizado;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idEcfMovimento")
    private List<EcfDocumentosEmitidos> ecfDocumentosEmitidosList;
    @JoinColumn(name = "ID_ECF_TURNO", referencedColumnName = "ID", nullable = false)
    @ManyToOne(optional = false)
    private EcfTurno idEcfTurno;
    @JoinColumn(name = "ID_ECF_OPERADOR", referencedColumnName = "ID", nullable = false)
    @ManyToOne(optional = false)
    private EcfOperador idEcfOperador;
    @JoinColumn(name = "ID_ECF_IMPRESSORA", referencedColumnName = "ID", nullable = false)
    @ManyToOne(optional = false)
    private EcfImpressora idEcfImpressora;
    @JoinColumn(name = "ID_ECF_EMPRESA", referencedColumnName = "ID", nullable = false)
    @ManyToOne(optional = false)
    private EcfEmpresa idEcfEmpresa;
    @JoinColumn(name = "ID_ECF_CAIXA", referencedColumnName = "ID", nullable = false)
    @ManyToOne(optional = false)
    private EcfCaixa idEcfCaixa;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idEcfMovimento")
    private List<EcfSuprimento> ecfSuprimentoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idEcfMovimento")
    private List<EcfRecebimentoNaoFiscal> ecfRecebimentoNaoFiscalList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idEcfMovimento")
    private List<EcfVendaCabecalho> ecfVendaCabecalhoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idEcfMovimento")
    private List<EcfFechamento> ecfFechamentoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idEcfMovimento")
    private List<EcfSangria> ecfSangriaList;

    public EcfMovimento() {
    }

    public EcfMovimento(Integer id) {
        this.id = id;
    }

    public EcfMovimento(Integer id, int idGerenteSupervisor, char statusMovimento) {
        this.id = id;
        this.idGerenteSupervisor = idGerenteSupervisor;
        this.statusMovimento = statusMovimento;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public int getIdGerenteSupervisor() {
        return idGerenteSupervisor;
    }

    public void setIdGerenteSupervisor(int idGerenteSupervisor) {
        this.idGerenteSupervisor = idGerenteSupervisor;
    }

    public Date getDataAbertura() {
        return dataAbertura;
    }

    public void setDataAbertura(Date dataAbertura) {
        this.dataAbertura = dataAbertura;
    }

    public String getHoraAbertura() {
        return horaAbertura;
    }

    public void setHoraAbertura(String horaAbertura) {
        this.horaAbertura = horaAbertura;
    }

    public Date getDataFechamento() {
        return dataFechamento;
    }

    public void setDataFechamento(Date dataFechamento) {
        this.dataFechamento = dataFechamento;
    }

    public String getHoraFechamento() {
        return horaFechamento;
    }

    public void setHoraFechamento(String horaFechamento) {
        this.horaFechamento = horaFechamento;
    }

    public BigDecimal getTotalSuprimento() {
        return totalSuprimento;
    }

    public void setTotalSuprimento(BigDecimal totalSuprimento) {
        this.totalSuprimento = totalSuprimento;
    }

    public BigDecimal getTotalSangria() {
        return totalSangria;
    }

    public void setTotalSangria(BigDecimal totalSangria) {
        this.totalSangria = totalSangria;
    }

    public BigDecimal getTotalNaoFiscal() {
        return totalNaoFiscal;
    }

    public void setTotalNaoFiscal(BigDecimal totalNaoFiscal) {
        this.totalNaoFiscal = totalNaoFiscal;
    }

    public BigDecimal getTotalVenda() {
        return totalVenda;
    }

    public void setTotalVenda(BigDecimal totalVenda) {
        this.totalVenda = totalVenda;
    }

    public BigDecimal getTotalDesconto() {
        return totalDesconto;
    }

    public void setTotalDesconto(BigDecimal totalDesconto) {
        this.totalDesconto = totalDesconto;
    }

    public BigDecimal getTotalAcrescimo() {
        return totalAcrescimo;
    }

    public void setTotalAcrescimo(BigDecimal totalAcrescimo) {
        this.totalAcrescimo = totalAcrescimo;
    }

    public BigDecimal getTotalFinal() {
        return totalFinal;
    }

    public void setTotalFinal(BigDecimal totalFinal) {
        this.totalFinal = totalFinal;
    }

    public BigDecimal getTotalRecebido() {
        return totalRecebido;
    }

    public void setTotalRecebido(BigDecimal totalRecebido) {
        this.totalRecebido = totalRecebido;
    }

    public BigDecimal getTotalTroco() {
        return totalTroco;
    }

    public void setTotalTroco(BigDecimal totalTroco) {
        this.totalTroco = totalTroco;
    }

    public BigDecimal getTotalCancelado() {
        return totalCancelado;
    }

    public void setTotalCancelado(BigDecimal totalCancelado) {
        this.totalCancelado = totalCancelado;
    }

    public char getStatusMovimento() {
        return statusMovimento;
    }

    public void setStatusMovimento(char statusMovimento) {
        this.statusMovimento = statusMovimento;
    }

    public Character getSincronizado() {
        return sincronizado;
    }

    public void setSincronizado(Character sincronizado) {
        this.sincronizado = sincronizado;
    }

    public List<EcfDocumentosEmitidos> getEcfDocumentosEmitidosList() {
        return ecfDocumentosEmitidosList;
    }

    public void setEcfDocumentosEmitidosList(List<EcfDocumentosEmitidos> ecfDocumentosEmitidosList) {
        this.ecfDocumentosEmitidosList = ecfDocumentosEmitidosList;
    }

    public EcfTurno getIdEcfTurno() {
        return idEcfTurno;
    }

    public void setIdEcfTurno(EcfTurno idEcfTurno) {
        this.idEcfTurno = idEcfTurno;
    }

    public EcfOperador getIdEcfOperador() {
        return idEcfOperador;
    }

    public void setIdEcfOperador(EcfOperador idEcfOperador) {
        this.idEcfOperador = idEcfOperador;
    }

    public EcfImpressora getIdEcfImpressora() {
        return idEcfImpressora;
    }

    public void setIdEcfImpressora(EcfImpressora idEcfImpressora) {
        this.idEcfImpressora = idEcfImpressora;
    }

    public EcfEmpresa getIdEcfEmpresa() {
        return idEcfEmpresa;
    }

    public void setIdEcfEmpresa(EcfEmpresa idEcfEmpresa) {
        this.idEcfEmpresa = idEcfEmpresa;
    }

    public EcfCaixa getIdEcfCaixa() {
        return idEcfCaixa;
    }

    public void setIdEcfCaixa(EcfCaixa idEcfCaixa) {
        this.idEcfCaixa = idEcfCaixa;
    }

    public List<EcfSuprimento> getEcfSuprimentoList() {
        return ecfSuprimentoList;
    }

    public void setEcfSuprimentoList(List<EcfSuprimento> ecfSuprimentoList) {
        this.ecfSuprimentoList = ecfSuprimentoList;
    }

    public List<EcfRecebimentoNaoFiscal> getEcfRecebimentoNaoFiscalList() {
        return ecfRecebimentoNaoFiscalList;
    }

    public void setEcfRecebimentoNaoFiscalList(List<EcfRecebimentoNaoFiscal> ecfRecebimentoNaoFiscalList) {
        this.ecfRecebimentoNaoFiscalList = ecfRecebimentoNaoFiscalList;
    }

    public List<EcfVendaCabecalho> getEcfVendaCabecalhoList() {
        return ecfVendaCabecalhoList;
    }

    public void setEcfVendaCabecalhoList(List<EcfVendaCabecalho> ecfVendaCabecalhoList) {
        this.ecfVendaCabecalhoList = ecfVendaCabecalhoList;
    }

    public List<EcfFechamento> getEcfFechamentoList() {
        return ecfFechamentoList;
    }

    public void setEcfFechamentoList(List<EcfFechamento> ecfFechamentoList) {
        this.ecfFechamentoList = ecfFechamentoList;
    }

    public List<EcfSangria> getEcfSangriaList() {
        return ecfSangriaList;
    }

    public void setEcfSangriaList(List<EcfSangria> ecfSangriaList) {
        this.ecfSangriaList = ecfSangriaList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof EcfMovimento)) {
            return false;
        }
        EcfMovimento other = (EcfMovimento) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.chronos.pafecf.entidades.EcfMovimento[ id=" + id + " ]";
    }
    
}
